home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / oper_sys / presto / prest1_0.lha / Tests / exer / spintest.C < prev   
C/C++ Source or Header  |  1991-12-11  |  1KB  |  69 lines

  1.  
  2. #include <stdio.h>
  3. #include <stream.h>
  4. #include "presto.h"
  5.  
  6. static shared_t int loopcount = 150;
  7.  
  8. int
  9. Main::init()
  10. {
  11.     char *progname = argv[0];
  12.     
  13.     nummainthreads = 1;
  14.     for (argc--, argv++; *argv && **argv == '-'; argv++, argc--)
  15.         switch (*(*argv + 1)) {
  16. #ifdef sequent
  17. #ifdef i386
  18.                 case 'a':
  19.                         affinity = 1;
  20.                 break;
  21. #endif /* i386 */
  22. #endif /* sequent */
  23.             case 'q':
  24.                 quantum = atoi(*argv + 2);
  25.                 break;
  26.             case 'n':
  27.                 numprocessors = atoi(*argv + 2);
  28.                 break;
  29.             case 't':
  30.                 nummainthreads = atoi(*argv + 2);
  31.                 break;
  32.             case 'l':
  33.                 loopcount = atoi(*argv + 2);
  34.                 break;
  35.             default:
  36.                 cerr << chr(*(*argv + 1)) << " unknown flag.\n";
  37.                     return -1;
  38.         }
  39.     return 0;
  40. }
  41.  
  42.  
  43. static shared_t Spinlock spinner;
  44. static shared_t int counter = 0;
  45.  
  46. int
  47. Main::main()
  48. {
  49.     register int loopcnt = loopcount;
  50.     register int ctr;
  51.     Spinlock *sp = &spinner;
  52.  
  53.     while (loopcnt--)    {
  54.         sp->lock();
  55.         ctr = ++counter;
  56.         if (ctr != counter)
  57.             thisthread->error("Failure: occupied");
  58.         sp->unlock();
  59.     }
  60.     return 0;
  61. }
  62.  
  63. int
  64. Main::done()
  65. {
  66.     printf("Success.\n");
  67.     return 0;
  68. }
  69.